package com.company.chainOfResbility;

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        Msg msg = new Msg();
        msg.setMsg("大家好,<script>欢迎访问，大家都是996");
//        String r = msg.getMsg();
//        r=r.replace('<','[');
//        r=r.replace('>',']');
//        msg.setMsg(r);


        FilterChain fc = new FilterChain();
        fc.add(new HTMLFilter());
//        List<Filter> filters = new ArrayList<>();
//        for (Filter f:
//             filters) {
//            f.doFilter(msg);
//        }
//        new HTMLFilter().doFilter(msg);
//        System.out.println(msg);

        FilterChain fc2 = new FilterChain();
        fc2.add(new URLFilter()).add(new FaceFilter());

        fc.add(fc2);
    }
}


class Msg {
    String name;
    String msg;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    @Override
    public String toString() {
        return "Msg{" +
                ", msg='" + msg + '\'' +
                '}';
    }
}


interface Filter {
    boolean doFilter(Msg msg);
}

class HTMLFilter implements Filter {

    @Override
    public boolean doFilter(Msg msg) {
        String r = msg.getMsg();
        r = r.replace('<', '[');
        r = r.replace('>', ']');
        msg.setMsg(r);
        return true;
    }
}

class URLFilter implements Filter {

    @Override
    public boolean doFilter(Msg msg) {
        return true;
    }
}

class FaceFilter implements Filter {

    @Override
    public boolean doFilter(Msg msg) {
        return true;
    }
}


class FilterChain implements Filter {
    List<Filter> filters = new ArrayList<>();

    public FilterChain add(Filter f) {
        filters.add(f);
        return this;
    }

    public boolean doFilter(Msg m) {
        for (Filter f :
                filters) {
            if (!f.doFilter(m)) return false;
        }
        return true;
    }
}
